package br.ufc.pet.controller;

import java.util.Calendar;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.ufc.pet.dao.LogEmailDao;
import br.ufc.pet.dao.LogEmailJPADao;
import br.ufc.pet.dao.UsuarioDao;
import br.ufc.pet.dao.UsuarioJPADao;
import br.ufc.pet.model.LogEmail;
import br.ufc.pet.model.Usuario;
import br.ufc.pet.util.Md5Util;
import br.ufc.pet.util.email.EmailSender;

@ManagedBean
@ViewScoped
public class EmailBean {

	public String enviarEmails() {
		try {
			LogEmail log = new LogEmail();
			log.setDataEnvio(Calendar.getInstance().getTime());
			log.setInfo(log.getDataEnvio().toString() + " - Envio de emails");

			LogEmailDao emailDao = new LogEmailJPADao();
			if (emailDao.emailsEnviados() == true) {
				gerarCodigo();
			}
			emailDao.commit();
			emailDao.begin();
			enviarEmail();
			
			emailDao.save(log);
			
			HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
			session.setAttribute("emailsEnviados",true);
			
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage("Aviso", "E-mails enviados com sucesso!"));
		} catch (RuntimeException ex) {
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,"Aviso", "Erro ao enviar e-mails!"));
		}
		return "?faces-redirect=true";

	}

	private void gerarCodigo() {

		UsuarioDao dao = new UsuarioJPADao();
		List<Usuario> usuarios = dao.getLista();
		
		for (Usuario usuario : usuarios) {
			usuario.setCodigo(Md5Util.md5(usuario.getEmail()));
			usuario.setVisualizado(false);
			dao.update(usuario);
		}
		
	}
	
	private static final String EMAIL = "petccqx@gmail.com";
	private static final String SENHA = "891430-891338";
	
	private void enviarEmail(){
		
		UsuarioDao dao = new UsuarioJPADao();
		List<Usuario> usuarios = dao.getLista();
		
		String msg = "Clique no link para obter o certificado : http://200.129.39.105:8080/SysCertificadosFlisol/certificado.xhtml?user=";
		String assunto = "Certificado Flisol";
		
		for (Usuario usuario : usuarios) {
			EmailSender sender = new EmailSender();
			sender.setEmail(EMAIL);
			sender.setPassword(SENHA);
			sender.setAddressee(usuario.getEmail());
			sender.setMessageText(msg + usuario.getCodigo());
			sender.setSubject(assunto);
			sender.sendEmails();
		}
		
	}
		
	public static void main(String[] args) {
		new UsuarioJPADao().begin();
		new EmailBean().gerarCodigo();
		new UsuarioJPADao().commit();
	}
}